#include <iostream>
#include <set>
#include <cstring>
using namespace std;
const int N=1e5+10;

int a1[N],a2[N];
int dp1[N][3],dp2[N][3];
int get_n(int x)
{
	if(x==0)
		return 0;
	if(x==2)
		return 1;
	if(x==4)
		return 2;
	return -1;
}
int main()
{
	int n;
	cin>>n;
	for(int i=1;i<=n;i++)
		scanf("%d",&a1[i]);
	for(int i=1;i<=n;i++)
		scanf("%d",&a2[i]);
	
	memset(dp1,-0x3f,sizeof(dp1));
	memset(dp2,-0x3f,sizeof(dp2));
	for(int i=0;i<3;i++)
	{
		dp2[0][i]=0;
	}
	
	
	for(int i=1;i<=n;i++)
	{
		for(int j=0;j<3;j++)
		{
			dp1[i][j]=dp1[i-1][j];
			dp2[i][j]=dp2[i-1][j];
		}
		
		int x=a1[i],y=a2[i],maxn=-0x3f3f3f3f;
		set<int> st;
		while(x)
		{
			int t=x%10;
			x/=10;
			if(get_n(t)>=0)
			{
				st.insert(get_n(t));
			}
		}
		for(auto j:st)
		{
			maxn=max(maxn,dp2[i-1][j]);
		}
		for(auto j:st)
		{
			dp1[i][j]=max(dp1[i][j],maxn+1);
		}
		maxn=-0x3f3f3f3f;
		st.clear();
		while(y)
		{
			int t=y%10;
			y/=10;
			if(get_n(t)>=0)
			{
				st.insert(get_n(t));
			}			
		}
		for(auto j:st)
		{
			maxn=max(maxn,dp1[i-1][j]);
		}
		for(auto j:st)
		{
			dp2[i][j]=max(dp2[i][j],maxn+1);
		}		
	}
	int ret=0;
	for(int i=0;i<3;i++)
	{
		ret=max(ret,max(dp1[n][i],dp2[n][i]));
	}
	cout<<ret<<endl;
	return 0;
}
